package Servidor.Clases.Control;

import java.io.IOException;
import java.util.ArrayList;

import util.SocketManager;
import Servidor.Ventanas.ServerWindow;

public class Conexion extends Thread{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ServerWindow window;
	private SocketManager manager;
	private String nomUsuario;
	private ArrayList<Conexion>listaConex;
	
	public Conexion(ServerWindow window, SocketManager manager, ArrayList<Conexion>lista) {
		super();
		this.window = window;
		this.manager=manager;
		this.nomUsuario="Sin identificar";
		listaConex=lista;
	}



	@Override
	public void run() {
		// TODO Auto-generated method stub
		Facade facade= new Facade();
		String comando="inic";
		try {
		do {
            //Lectura de la frase enviada por el cliente
            
            	comando=manager.Leer();
				
                System.out.println("Recibido"+comando);
                if(comando.length()>3&&comando.substring(0, 4).equals("USER")){
                	nomUsuario="Usuario: "+comando.substring(4);
                	window.actualizar();
                }
                try {
            	String recibido=facade.ejecucionComando(comando);
            	System.out.println("A enviar: "+recibido);
				manager.Escribir(recibido);
			} catch (InexistentCommandException e) {
				// TODO Auto-generated catch block
				System.out.println("Error");
				try {
					manager.Escribir("casco");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }while(!comando.equals("SALIR"));
		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		listaConex.remove(this);
		window.actualizar();
		try {
			this.cerrar();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public String toString(){
		return nomUsuario;
	}
	
	public void cerrar() throws IOException{
		manager.CerrarSocket();
		manager.CerrarStreams();
	}
	

}
